/*
 * 登山项目
 * author xudihui
 * Date: 2015/3/27
 */


jQuery.prototype.progress = function() {
     var dd = jQuery.queue(this[0]);
     if (!dd || (dd && dd.length == 0)) {
         return false
     }
     return true
  };
  
  
  
(function ($) {
     window.LeDao = window.LeDao || {};  //命名空间



	$.uedWidget = function(name, base, prototype) {
			var namespace = name.split( "." )[0], fullName;
			name = name.split( "." )[1];
			fullName = namespace + "-" + name;
			// 例如参数name='ued.tabs'，变成namespace='ued',name='tabs',fullName='ued-tabs'
			// base默认为Widget类，组件默认会继承base类的所有方法
			if (!prototype) {
				prototype = base;
				base = $.UEDWidget;
			}
			// create selector for plugin
			$.expr[ ":" ][fullName] = function(elem) {
				return !!$.data(elem, name);
			};
			// 创建命名空间$.ued.tabs
			$[namespace] = $[namespace] || {};
			// 组件的构造函数
			$[ namespace ][name] = function(options, element) {
				// allow instantiation without initializing for simple inheritance
				if (arguments.length) {
					this._createWidget(options, element);
				}
			};
			// 初始化父类，一般调用了$.Widget
			var basePrototype = new base();
			basePrototype.options = $.extend(true, {}, basePrototype.options);
			// 给om.tabs继承父类的所有原型方法和参数
			$[ namespace ][name].prototype = $.extend(true, basePrototype, {
				namespace : namespace,
				widgetName : name,
				// 组件的事件名前缀，调用_trigger的时候会默认给trigger的事件加上前缀
				// 例如_trigger('create')实际会触发'tabscreate'事件
				widgetEventPrefix : $[ namespace ][name].prototype.widgetEventPrefix || name,
				widgetBaseClass : fullName
			}, prototype);
			// 把tabs方法挂到jquery对象上，也就是$('#tab1').tabs();
			var temp = $.uedWidget.bridge(name, $[ namespace ][name]);
		};

		$.uedWidget.bridge = function(name, object) {
			$.fn[name] = function(options) {
				// 如果tabs方法第一个参数是string类型，则认为是调用组件的方法，否则调用options方法
				var isMethodCall = typeof options === "string", args = Array.prototype.slice.call(arguments, 1), returnValue = this;
				// allow multiple hashes to be passed on init
				options = !isMethodCall && args.length ? $.extend.apply(null, [true, options].concat(args)) : options;
				// '_'开头的方法被认为是内部方法，不会被执行，如$('#tab1').tabs('_init')
				if (isMethodCall && options.charAt(0) === "_") {
					return returnValue;
				}
				if (isMethodCall) {
					this.each(function() {
						// 执行组件方法
						var instance = $.data(this, name);
						if (options == 'options') {
							returnValue = instance && instance.options;
							return false;
						} else {
							var methodValue = instance && $.isFunction(instance[options]) ? instance[options].apply(instance, args) : instance;
							if (methodValue !== instance && methodValue !== undefined) {
								returnValue = methodValue;
								return false;
							}
						}
					});
				} else {
					// 调用组件的options方法
					this.each(function() {
						var instance = $.data(this, name);
						if (instance) {
							// 设置options后再次调用_init方法，第一次调用是在_createWidget方法里面。这个方法需要开发者去实现。
							// 主要是当改变组件中某些参数后可能需要对组件进行重画
							instance._setOptions(options || {});
							$.extend(instance.options, options);
							$(instance.beforeInitListeners).each(function() {
								this.call(instance);
							});
							instance._init();
							$(instance.initListeners).each(function() {
								this.call(instance);
							});
						} else {
							// 没有实例的话，在这里调用组件类的构造函数，并把构造后的示例保存在dom的data里面。注意这里的this是dom，object是模块类
							$.data(this, name, new object(options, this));
						}
					});
				}
				return returnValue;
			};
		};
		$.uedWidget.addCreateListener = function(name, fn) {
			var temp = name.split(".");
			$[ temp[0] ][temp[1]].prototype.createListeners.push(fn);
		};
		$.uedWidget.addInitListener = function(name, fn) {
			var temp = name.split(".");
			$[ temp[0] ][temp[1]].prototype.initListeners.push(fn);
		};
		$.uedWidget.addBeforeInitListener = function(name, fn) {
			var temp = name.split(".");
			$[ temp[0] ][temp[1]].prototype.beforeInitListeners.push(fn);
		};
		$.UEDWidget = function(options, element) {
			this.createListeners = [];
			this.initListeners = [];
			this.beforeInitListeners = [];
			// allow instantiation without initializing for simple inheritance
			if (arguments.length) {
				this._createWidget(options, element);
			}
		};
	   
		$.UEDWidget.prototype = {
			widgetName : "widget",
			widgetEventPrefix : "",
			options : {
				disabled : false
			},
			_createWidget : function(options, element) {
				$.data(element, this.widgetName, this);
				this.element = $(element);
				this.options = $.extend(true, {}, this.options, this._getCreateOptions(), options);
				var self = this;
				//注意，不要少了前边的 "ued-"，不然会与jquery-ui冲突
				this.element.bind("ued-remove._" + this.widgetName, function() {
					self.destroy();
				});
				// 开发者实现
				this._create();
				$(this.createListeners).each(function() {
					this.call(self);
				});
				// 如果绑定了初始化的回调函数，会在这里触发。注意绑定的事件名是需要加上前缀的，如$('#tab1').bind('tabscreate',function(){});
				this._trigger("create");
				// 开发者实现
				$(this.beforeInitListeners).each(function() {
					this.call(self);
				});
				this._init();
				$(this.initListeners).each(function() {
					this.call(self);
				});
			},
			_getCreateOptions : function() {
				return $.metadata && $.metadata.get( this.element[0] )[this.widgetName];
			},
			_create : function() {
			},
			_init : function() {
			},
			destroy : function() {
				this.element.unbind("." + this.widgetName).removeData(this.widgetName);
				this.widget().unbind("." + this.widgetName);
			},
			widget : function() {
				return this.element;
			},

			option : function(key, value) {
				var options = key;
				if (arguments.length === 0) {
					// don't return a reference to the internal hash
					return $.extend({}, this.options);
				}
				if ( typeof key === "string") {
					if (value === undefined) {
						return this.options[key];
						// 获取值
					}
					options = {};
					options[key] = value;
				}
				this._setOptions(options);
				// 设置值
				return this;
			},
			_setOptions : function(options) {
				var self = this;
				$.each(options, function(key, value) {
					self._setOption(key, value);
				});
				return this;
			},
			_setOption : function(key, value) {
				this.options[key] = value;
				return this;
			},

			// $.widget中优化过的trigger方法。type是回调事件的名称，如"onRowClick"，event是触发回调的事件（通常没有这个事件的时候传null）
			// 这个方法只声明了两个参数，如有其他参数可以直接写在event参数后面
			_trigger : function(type, event) {
				// 获取初始化配置config中的回调方法
				var callback = this.options[type];
				// 封装js标准event对象为jquery的Event对象
				event = $.Event(event);
				event.type = type;
				if (event.originalEvent) {
					for (var i = $.event.props.length, prop; i; ) {
						prop = $.event.props[--i];
						event[prop] = event.originalEvent[prop];
					}
				}
				// 构造传给回调函数的参数，event放置在最后
				var newArgs = [], argLength = arguments.length;
				for (var i = 2; i < argLength; i++) {
					newArgs[i - 2] = arguments[i];
				}
				if (argLength > 1) {
					newArgs[argLength - 2] = arguments[1];
				}
				return !($.isFunction(callback) && callback.apply(this.element, newArgs) === false || event.isDefaultPrevented() );
			}
		};

    $.uedWidget('ued.uedSelect', {
        options : {
			//··默认宽度
			width:300
		},
        _create : function() {
            var $el = this.element, options = this.options, self = this;
            this._createSelect($el);
        },
		
        _init : function() {
            var self = this, options = this.options, $el = this.element;
        },
		
        _createSelect : function($el) {
			var $el = this.element, options = this.options, self = this;
			//··设置文本主体
			var $container = $('<div class="uew-select"></div>')
			var $stateDefault = $('<div class="uew-select-value ue-state-default"></div>')
			var $text = $('<em class="uew-select-text"></em>')
			$stateDefault.append($text).append('<em class="uew-icon uew-icon-triangle-1-s"></em>')
			$el.wrap($container)
			$el.before($stateDefault)
			
			//··设置组件宽度
			var width = parseInt($el.attr("width")) ? parseInt($el.attr("width")) : options.width;
			$el.width(width);
			
		   //··设置组件的样式和大小（在有单位和无单位情况）
		   if($el.attr("unit")){
				var $unit =$('<span class="uew-unit">'+$el.attr("unit")+'</span>')
				$stateDefault.addClass("select-hasUnit").append($unit)
				$stateDefault.width(width - 47);
		   }
		   else{
				$stateDefault.width(width -27);
			}
			
			//判断边框样式
			if($el.hasClass('uew-no-border')){
				$el.parent().find('.uew-select-value').addClass('uew-no-border');
				// 边框的hover状态
				$el.hover(function(){
					$el.parent().find(".uew-select-value").addClass("uew-border-flag");
				},function(){
					$el.parent().find(".uew-select-value").removeClass("uew-border-flag");
				});
			}
		
			//··默认文本
			$text.text($el.find(":selected").text())
			
			//··添加焦点操作
			$el.focus(function(){
				$el.parent().addClass("ue-state-focus");
			});
			$el.blur(function(){
				$el.parent().removeClass("ue-state-focus");
			});
			$el.parent().hover(function(){
				$el.parent().addClass("ue-state-hover");
			},function(){
				$el.parent().removeClass("ue-state-hover");
			});

			$el.change(function(){
				$el.parent().find(".uew-select-text").text($(this).find(":selected").text())
			});
        },
		// 重置option选项
		setOption : function()
		{
			var self = this, options = this.options, $el = this.element;
			$el.parent().find(".uew-select-text").text($el.find(":selected").text());
		},
        destroy : function() {
            var $uedSelect = this.element;
            $uedSelect.remove();
        }
    });
	
	 //select美化
	LeDao.initSelect = function(el,width){ //el: $(".select1") ; width: 150
		el.uedSelect({width : width});		
	}
	
	 //页签切换方法
	LeDao.initTab = function( config ){  //{index:1,wrap:$('#tab01')}
		var index = config.index || 1;
		index--;
		var wrap =$( config.wrap );//原生dom对象，或者jquery对象都可以；
		var id = wrap.attr('id');
		var arrayTab = $('.tab_title',wrap);
		var arrayContent = $('div[name^="' + id +'"]'); //页签切换的时候要与wrap的ID同名的name属性作为content
		arrayTab.removeClass('tab_cur');
		arrayTab.eq(index).addClass('tab_cur');
		arrayContent.css('display','none');
		arrayContent.eq(index).css('display','')
		arrayTab.click(function(){
			var index = $(this).index();
			arrayTab.removeClass('tab_cur');
			arrayTab.eq(index).addClass('tab_cur');
			arrayContent.css('display','none');
			arrayContent.eq(index).css('display','')		   
		});
	}

     //Dialog 初始化
	LeDao.initDialog = function(){  //因为这次项目只有一个页面用到dialog，所以暂时没有设置参数，写死的。
	     $('.frame').width(parseInt($(window).width())).height(parseInt($(window).height()));
		 $('#addMember').click(function(){
			 $('.frame').width(parseInt($(window).width())).height(parseInt($(window).height()))
			 $('.frame,#dialog').fadeIn();	
		 })
		$("table.grid01").delegate("a.deleteMember","click",function(){
			if(window.confirm('你真的忍心删除这位队员吗？')){
			 $(this).parents('.memberList').first().remove()
			}else{
			 return false;
			}
		});
		 $('#dialog a#dialog_add,#dialog a.cancel').click(function(){
			 $('.frame,#dialog').fadeOut();
			 var self_ = $(this);
			 if($(this).attr('id') == 'dialog_add'){
			     var tr = "<tr class='memberList'><td class='left'>队员"
				          + ($('tr.memberList').length+1) +":</td><td><div class='grid01_input'> <div class='grid01_input_name'>"
						  + ($('.grid01_input','.dialog_content').eq(0).val() == '' ? '匿名' : $('.grid01_input','.dialog_content').eq(0).val())
						  + "</div><div class='grid01_input_tel'>"
						  + ($('.grid01_input','.dialog_content').eq(1).val() == '' ? '暂无电话' : $('.grid01_input','.dialog_content').eq(1).val())
						  + "</div><div class='grid01_input_position red'><span class='blue'>"
						  + $('input:radio:checked').val()
						  + "</span></div></div></td><td><a class='deleteMember' title='删除' style='cursor:pointer'>&nbsp;<img src='theme/default/images/delete.png'/></a></td></tr>";
                $('.grid01_input','.dialog_content').val(''); //数值清空；
				$('.grid01 tr.last').before(tr); 
			 }
		 });	 
		 $(window).resize(function(){
		 
		 
		   if($('.frame').css('display') !='none'){
			$('.frame').width(parseInt($(window).width())).height(parseInt($(window).height()))
		   }
		 });
	}	
	
	LeDao.initIndex = function(){
		$('#header,#footer,#mainbody_index,.pic_img').height($(window).height());
		$('#mainbody_index,.pic_img').width($(window).width()-529);
		var top = ($(window).height()-240)/2-112;
		top > 87 ? top = top : top = 87;
		$('#nav2').css('top',top);
		var arr = ['',{'爬山平台':'http://www.xudihui.com','二级菜单02':'#'},{'二级菜单01':'#','二级菜单02':'#'},{'二级菜单01':'#','二级菜单011':'#'},{'二级菜单01':'#','二级菜单0111':'#'}]
		
		$('#header').after('<div id="subnav"></div>');
		$('#subnav').height($(window).height());
		for(var i = 0;i<$('#nav2 li').length;i++){
			if(arr[i] != ''){
				var $ul = $('<ul ' +  'index="' + i + '" style="top:'+ (parseInt(top)+50*(i)) +'px"></ul>')
				$('#subnav').append($ul);
				var tempArr = arr[i];
				for( x in tempArr){
					$ul.append('<a ' +  'href="' + tempArr[x] + '">'+ x +'</a>')
				}					
			}
		}
		
        $('#nav2 li').hover(function(){
			$('#nav2 li a').removeClass('active');
			$(this).find('a').addClass('active')
		    var index = $(this).index();
				$('#subnav').clearQueue()
				
				$('#subnav ul').css('display','none');
				var temp = '#subnav ul[index="'+index+'"]';
				if($(temp).length<1){
					return
				}
				$(temp).css('display','');
				$('#subnav').animate({left:129},100)
						
		},function(e){
			if(e.clientX>120 && e.clientX<158){
				return
			}
			else{
				$('#subnav').animate({left:0},50)	
			}

		});
        $('#subnav ul').mouseleave(function(e){
		$('#nav2 li a').removeClass('active');
		$('#nav2 li').first().find('a').addClass('active');
		  if(e.clientX<129){
				return
		  }
		  $('#subnav').animate({left:0},50)
	    });			
	}				


})(jQuery, window);